package cn.myzqu.sign.common.file;


import net.coobird.thumbnailator.Thumbnails;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;

/**
 * @Author: 的川
 * @Date: 2019/1/8
 */
public class ImgUtil {


    /**
     * 生成唯一的主键
     * 格式: 时间+随机数
     * @return
     */
    public static synchronized String genUniqueKey() {
        return "IMG_"+System.currentTimeMillis()  ;
    }

    /**
     * 删除
     * @param files
     */
    public static void deleteFile(File... files) {
        for (File file : files) {
            if (file.exists()) {
                file.delete();
            }
        }
    }


    /**
     * 压缩图片
     * @param file
     * @throws Exception
     */
    public static void compress(File file) throws Exception{
        //根据情况进行图片压缩
        BufferedImage bim = ImageIO.read(file);
        //限制宽和高，循环压缩宽高，直至都小于1920
        if(bim.getWidth()>1920||bim.getHeight()>1920){
            while(bim.getWidth()>1920||bim.getHeight()>1920){
                Thumbnails.of(file).scale(0.6f).toFile(file);
                bim = ImageIO.read(file);
            }
        }
        bim = ImageIO.read(file);
        if(file.length() >= 1.0*1024*1024){
            //大于1M的情况，不断循环，压缩到1M以下
            while(file.length() >= 1.0*1024*1024) {
                Thumbnails.of(file).scale(1.00f).outputQuality(0.90f).toFile(file);
                System.out.println("大于1M，压缩一次");
            }
        }else if(file.length() >= 0.5*1024*1024){
            //大于500k的情况，压缩0.88
            //尺寸大，体积小的图片再压缩很可能会导致图片损坏,所以宽高都小于500才压缩
            if(bim.getWidth()<500&&bim.getHeight()<500){
                System.out.println("执行大于500k的情况");
                Thumbnails.of(file).scale(1.00f).outputQuality(0.85f).toFile(file);
            }
        }else if(file.length()  >= 0.2*1024*1024){
            //大于200k的情况，压缩0.90
            if(bim.getWidth()<500&&bim.getHeight()<500) {
                System.out.println("执行大于200k的情况");
                Thumbnails.of(file).scale(1.00f).outputQuality(0.90f).toFile(file);
            }
        }
        else if(file.length() >=0.1*1024*1024){
            //大于100k的情况，压缩0.95
            if(bim.getWidth()<500&&bim.getHeight()<500) {
                System.out.println("执行大于100k的情况");
                Thumbnails.of(file).scale(1.00f).outputQuality(0.95f).toFile(file);
            }
        }
    }
}
